home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Gekkan Dennou Club 145
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan).7z
/
Gekkan Dennou Club - 2000.6 Vol. 145 (Japan) (Track 1).bin
/
games
/
spassion
/
source.lzh
/
SOURCE
/
XSP.C
< prev
next >
Wrap
Text File
|
2000-03-31
|
4KB
|
146 lines
/*
* スプライト周りの初期設定
*/
/*#include <stdio.h>*/
#include <string.h>
#include <XSP2lib.H>
#include <PCM8Afnc.H>
#include "SPASSION.H"
#include "SUB.H"
#define RGB(r,g,b) ((g)<<11|(r)<<6|(b)<<1)
#define PCG_MAX 4096 /* スプライトPCGパターン最大使用数 */
#define FRM_MAX 16192 /* 複合スプライトフレームデータ最大使用数 */
#define REF_MAX 2048 /* 複合スプライトリファレンスデータ最大使用数 */
#define PAL_MAX 15 /* スプライトパレットパターン最大使用数 */
static char pcg_alt[PCG_MAX + 1]; /* PCG配置管理テーブル */
static char pcg_dat[PCG_MAX * 128]; /* PCGデータファイル読み込みバッファ */
static XOBJ_REF_DAT ref_dat[REF_MAX]; /* リファレンスデータ */
static XOBJ_FRM_DAT frm_dat[FRM_MAX]; /* フレームデータ */
static unsigned short pal_dat[ PAL_MAX*16 ] ; /* パレットデータファイル読み込みバッファ */
static int sizeof_pcg = 0; /* スプライトPCGパターン読み込み数 */
static int sizeof_ref = 0; /* 複合スプライトリファレンスデータ読み込み数 */
static int sizeof_frm = 0; /* 複合スプライトフレームデータ読み込み数 */
/* SP データ読み込み */
static short LoadSP (char *fname)
{
int p;
short sp_no = sizeof_pcg / 128;
char temp_fname[92];
strcpy (temp_fname, fname);
strcat (temp_fname, ".SP");
p = LoadFile(temp_fname, &pcg_dat[sizeof_pcg], sizeof (char), 128 * PCG_MAX - sizeof_pcg);
sizeof_pcg += p;
#ifdef DEBUG
printf ("%s を読み込みました sp_no = %hd\n", fname, sp_no);
#endif
return (sp_no);
}
/* XSP 各種データ読み込み */
static short LoadXSP (char *fname)
{
int i;
int p, f, r;
short obj_no = sizeof_ref;
char temp_fname[92];
strcpy (temp_fname, fname);
strcat (temp_fname, ".FRM");
f = LoadFile (temp_fname, &frm_dat[sizeof_frm], sizeof (XOBJ_FRM_DAT), FRM_MAX - sizeof_frm);
strcpy (temp_fname, fname);
strcat (temp_fname, ".REF");
r = LoadFile (temp_fname, &ref_dat[sizeof_ref], sizeof (XOBJ_REF_DAT), REF_MAX - sizeof_ref);
strcpy (temp_fname, fname);
strcat (temp_fname, ".XSP");
p = LoadFile (temp_fname, &pcg_dat[sizeof_pcg], sizeof (char), 128 * PCG_MAX - sizeof_pcg);
/* FRM_DAT[].pt 補正 */
for (i = 0; i < f; i++)
frm_dat[sizeof_frm + i].pt += sizeof_pcg / 128;
/* REF_DAT[].ptr 補正 */
for (i = 0; i < r; i++)
(int) ref_dat[sizeof_ref + i].ptr += (int) (&frm_dat[sizeof_frm]);
sizeof_pcg += p;
sizeof_frm += f;
sizeof_ref += r;
#ifdef DEBUG
printf ("%s を読み込みました sizeof_ref = %hd\n", fname, obj_no);
#endif
return (obj_no);
}
/* スプライトデータの読み込み、設定 */
void LoadXSPFile( void )
{
int size=0;
obj_boss1 = LoadXSP("SP/BOSS01");
obj_boss2 = LoadXSP("SP/BOSS02");
obj_boss3 = LoadXSP("SP/BOSS03");
obj_boss4 = LoadXSP("SP/BOSS04");
obj_boss_m00= LoadXSP("SP/BOSS_M00");
obj_boss_m01= LoadXSP("SP/BOSS_M01");
obj_dragon = LoadXSP("SP/DRAGON");
obj_effect = LoadSP("SP/EFFECT");
obj_explall = LoadXSP("SP/EXPLALL");
obj_hahen = LoadXSP("SP/HAHEN");
obj_hatch = LoadXSP("SP/HATCH");
obj_item = LoadSP("SP/ITEM");
obj_lboss = LoadXSP("SP/LBOSS");
obj_mine = LoadXSP("SP/MINE");
obj_moji = LoadSP("SP/MOJI");
obj_obj = LoadSP("SP/OBJ");
obj_obj_b = LoadXSP("SP/OBJ_B");
obj_option = LoadSP("SP/OPTION");
obj_player = LoadXSP("SP/PLAYER");
obj_shot = LoadSP("SP/SHOT");
obj_shot_b = LoadXSP("SP/SHOT_B");
obj_titspark= LoadXSP("SP/TITSPARK");
obj_zako = LoadSP("SP/ZAKO");
obj_zako_k = LoadSP("SP/ZAKO_K");
size = LoadFile( "SP/SP.PAL", pal_dat, sizeof(unsigned short),15*16 );
}
/*----------------[ XSPシステムを初期化 ]----------------*/
void InitXSP( void )
{
int i=0;
unsigned short *pal=(unsigned short *)0xE82220;
xsp_on() ; /* XSPシステムを組み込む */
xsp_mode( xsp_mode_num ) ;
xsp_pcgdat_set( pcg_dat /* PCGデータを指定 */
, pcg_alt /* PCG配置管理テーブルを指定 */
, sizeof(pcg_alt) /* PCG配置管理テーブルのサイズを指定 */
) ;
xsp_objdat_set( ref_dat ) ; /* 複合スプライト形状データを指定 */
pcm8a_vsyncint_on();
xsp_pcgmask_on(0,63); /* BGキャラ分空けておく */
xsp_pcgmask_on(192,255); /* BG1分空けておく */
/*パレット設定*/
for(i=0;i<PAL_MAX*16;i++)
*(pal++)=pal_dat[i];
}